package LanQiao;

import java.util.Scanner;

public class demo3 {
    public static int sum = 0;
    public static int []arr = new int[1000];
    /**
     * 问题描述
     * 用递归来实现快速排序（quick sort）算法。快速排序算法的基本思路是：
     * 假设要对一个数组a进行排序，且a[0] = x。首先对数组中的元素进行调整，使x放在正确的位置上。
     * 同时，所有比x小的数都位于它的左边，所有比x大的数都位于它的右边。然后对于左、右两段区域，递归地调用快速排序算法来进行排序。
     * 　　输入格式：输入只有一行，包括若干个整数（不超过10个），以0结尾。
     * 　　输出格式：输出只有一行，即排序以后的结果（不包括末尾的0）。
     * 输入输出样例
     * 样例输入
     * 5 2 6 1 7 3 4 0
     * 样例输出
     * 1 2 3 4 5 6 7
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        while (n!=0){
            arr[sum++] = n;
            n = sc.nextInt();
        }
        sc.close();
        int l = 0,r =sum-1;
        quickSort(arr,l,r);
        for (int i = 0; i < sum; i++) {
            System.out.print(arr[i]+" ");
        }
    }

    static void quickSort(int[] arr, int l, int r) {
        if (l >= r)
            return;
        int i = l, j = r, temp = arr[l];      //选取左边的第一个数作为基准
        while (i < j) {
            while (arr[j] >= temp && i < j)     //处理右边
                j--;
            arr[i] =arr[j];    //右边出现比基准小的数，放到左经作为基准存储到temp中
            while (arr[i] <= temp && i < j)     //处理左边边，左边第一个数已
                i++;
           arr[j] = arr[i];      //左边出现比基准大的数，放到右边
        }
        //此时 i = j，将基准放回原数组
        arr[i] = temp;
        //递归遍历左侧和右侧
        quickSort(arr, l, i - 1);
        quickSort(arr, i + 1, r);
    }
}
